<?php 
class BdAccess {
    private $bdd;
    function __construct() {
        $this->bdd=$this->db_connect();
    }
   function db_connect() 
{
  // 1) ouverture de la connexion à la base fconte
	$dsn = 'mysql:host=localhost;dbname=fconte;';
	$username = 'root';
	$password = '';
	//$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$pdo_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);

	$bdd = new PDO($dsn,$username ,$password,$pdo_options);
	// 2) exécution de la requête  
	return $bdd;
}

    function findUser($LoginUtilisateur, $PassUtilisateur){
    $sth = $this->bdd->prepare("
    SELECT NomUtilisateur , PassUtilisateur ,NumUtilisateur
    FROM utilisateur
    WHERE utilisateur.LoginUtilisateur = '" .$LoginUtilisateur . "'
    and utilisateur.PassUtilisateur = '" .$PassUtilisateur. "'
    and utilisateur.NumUtilisateur in (select NumUtilisateur from enseignant)");
    $sth->execute();

    return $sth->fetch(PDO::FETCH_ASSOC);
    }
   function getListSeancesQuery($numEnseignant,$dateDeb,$dateFin,$numEP,$idGroupe,$useidGroupeNULL){
        // $numEnseignant = le nom de l'enseignant connecté
    // $dateDeb début de l'interval de date (filtre) choisie par l'enseignent
    // $dateFin fin de l'interval de date (filtre) choisie par l'enseignent
    // $numEP : numéro de la matiere choisie par l'enseignent
    // $numGroupe: numéro du groupe choisie par l'enseignent
    $query="select s.* , e.*, ep.*
    FROM seance s, enseignant e, ep 
    WHERE s.NumEnseignant=$numEnseignant ";
    if($dateDeb){
    $query=$query." AND s.dateSeance>= '$dateDeb'" ;
    }
    if($dateFin){
    $query=$query." AND s.dateSeance<= '$dateFin'" ;
    }
    if($numEP){
    $query=$query." AND ep.numEP='$numEP'" ;
    }
    if($useidGroupeNULL && $idGroupe=="NULL"){
        $query=$query." AND s.idGrp IS ".$idGroupe;
    }else if($idGroupe){
        $query=$query." AND s.idGrp=$idGroupe";
    }
    //LES JOINTURES:
    $query=$query." AND s.numEP=ep.numEP 
        AND s.numEnseignant= e.numEnseignant" ;
    //LES Groupe BY:
    $query=$query." GROUP BY s.idSeance
        ORDER BY s.dateSeance DESC";
    return $query;
    }
    function getListSeances($numEnseignant,$dateDeb,$dateFin,$numEP,$idGroupe){
         if(strlen($dateFin)==10){
            $dateFin=$dateFin+" 23:59:59";
         }
        $query=$this->getListSeancesQuery($numEnseignant,$dateDeb,$dateFin,$numEP,$idGroupe,true);
        $sth = $this->bdd->prepare($query);
	$sth->execute();
	//echo $query;

    return $sth->fetchAll(PDO::FETCH_ASSOC);
    //$results=$this->bdd->query($query);
    //return $results;
    }
    
    function getListSeancesEtu($numEnseignant,$dateDeb,$dateFin,$numEP,$idGroupe){
        $query=$this->getListSeancesQuery($numEnseignant,$dateDeb,$dateFin,$numEP,$idGroupe,false);
        $query2=$this->getListSeancesQuery($numEnseignant,$dateDeb,$dateFin,$numEP,"NULL",true);
	$queryFinal="($query) UNION ($query2) ORDER BY dateSeance DESC";
        $sth = $this->bdd->prepare($queryFinal);
	$sth->execute();
	//echo $query;

    return $sth->fetchAll(PDO::FETCH_ASSOC);
    //$results=$this->bdd->query($query);
    //return $results;
    }
    function getEtudiantByNum($numEtu){
        $query="select u.NumUtilisateur,u.NomUtilisateur,u.PrenomUtilisateur,e.* 
                FROM utilisateur u, etudiant e 
                where e.NumEtudiant='$numEtu' 
                and u.NumUtilisateur=e.NumEtudiant";

        $sth = $this->bdd->prepare($query);
	$sth->execute();
	//echo $query;
        return $sth->fetch(PDO::FETCH_ASSOC); 
    }
    function getSeances($numEtudiant,$numEp,$annee){
        $annee= intval($annee);
        $query="SELECT seance.*, groupeTD.numgrp, ep.libelleEP
            FROM seance, presence, groupeTD, ep
            WHERE presence.numEtudiant='$numEtudiant'
            AND seance.numEp='$numEp' 
            AND (
            ( MONTH(seance.dateSeance)>9 AND YEAR(seance.dateSeance)=$annee ) 
                OR ( 
             MONTH(seance.dateSeance)<=9 AND YEAR(seance.dateSeance)=($annee-1) 
                 ) 
            ) 
            AND seance.idSeance=presence.idSeance 
            AND seance.idgrp=groupeTd.idgrp 
            AND seance.numEP=ep.numEP 
            
                ORDER BY seance.dateSeance DESC";

        $sth = $this->bdd->prepare($query);
	$sth->execute();
	//echo $query;
        return $sth->fetchAll(PDO::FETCH_ASSOC);        
    }

    function getListEp($numEnseignant){
        // $numEnseignant = le nom de l'enseignant connecté

        $query="select ep.*
        FROM ep, enseignerEP
        WHERE enseignerEP.numEnseignant=$numEnseignant ";

        //LES JOINTURES:
        $query=$query." AND enseignerEP.numEP=ep.numEP" ;
        //LES Groupe BY:
        $sth = $this->bdd->prepare($query);
	$sth->execute();
        return $sth->fetchAll(PDO::FETCH_ASSOC);
        //$results=$this->bdd->query($query);
        //return $results;
    }
    
    function getListeEtudiantBySeance($idSeance){
     $query="select u.NumUtilisateur,u.NomUtilisateur,u.PrenomUtilisateur,p.Presence,e.* 
         From utilisateur u,etudiant e,Presence p
         WHERE p.idSeance=$idSeance
         AND e.NumEtudiant=u.NumUtilisateur
         AND e.NumEtudiant=p.NumEtudiant";
      /*"select u.NumUtilisateur,u.NomUtilisateur,u.PrenomUtilisateur,p.Presence,e.* 
         From utilisateur u,etudiant e,Presence p, ep,ue, etu_appartient_groupe, Seance, groupeTD
         WHERE p.idSeance=$idSeance
         AND p.idSeance=Seance.idSeance
         AND Seance.numEP = ep.numEP
         AND ep.numUE=ue.numUE
         AND ue.numUE = e.NumEtudiant
         AND e.NumEtudiant=u.NumUtilisateur
         AND e.NumEtudiant=p.NumEtudiant
         AND Seance.idgrp = groupeTD.idgrp"
*/
      $sth = $this->bdd->prepare($query);
            $sth->execute();
            return $sth->fetchAll(PDO::FETCH_ASSOC);
    }

    function getQueryEtudiant($numEnseignant,$nomEtu,$numFormation,$numEP,$numGroupe,$idGroupe,$anneeChoisir){
        // $numEnseignant = le nom de l'enseignant connecté
            // $numFormation : numéro de la formation
            // $numEP : numéro de la matiere choisie par l'enseignent
            // $numGroupe: numéro du groupe choisie par l'enseignent
            // $numEp : numéro de matiere
            $query="select u.NumUtilisateur,u.NomUtilisateur,u.PrenomUtilisateur,etu.*, ep.* 
            FROM utilisateur u,etudiant etu,ue, ep , groupeTd, Formation f,appartenir,choisir,enseignerEP,etu_appartient_groupe
            WHERE enseignerEP.numEnseignant=$numEnseignant 
            AND choisir.anneeChoisir='$anneeChoisir' ";
            if($nomEtu){
                $query=$query." AND u.NomUtilisateur LIKE '%$nomEtu%'";
            }
            if($numFormation){
                $query=$query." AND f.idFormation=$numFormation";
            }
            if($numEP){
            $query=$query." AND ep.numEP=$numEP" ;
            }
            if($idGroupe||$numGroupe){
                if($idGroupe){ $query=$query." AND groupeTd.idGrp=$idGroupe " ; }
                
                if($numGroupe){ $query=$query." AND groupeTd.numgrp=$numGroupe ";  }
                
                $query=$query." AND etu.NumEtudiant=etu_appartient_groupe.numEtudiant
                    AND etu_appartient_groupe.idGrp=GroupeTD.idgrp" ;    
            }    
            
            //LES JOINTURES:
            $query=$query." 
            AND u.NumUtilisateur= etu.NumEtudiant 
            AND etu.NumEtudiant= choisir.NumEtudiant  
            AND	choisir.NumUE=ue.NumUE 
            AND ue.NumUE=appartenir.NumUE 
            AND appartenir.idFormation=f.idFormation
            AND ue.NumUE=ep.numUE
            AND enseignerEP.numEP=ep.numEP " ;
            //LES Groupe BY:
            $query=$query."GROUP BY u.NumUtilisateur
                ORDER BY NomUtilisateur,PrenomUtilisateur";
            return $query;
        
    }
    function  getListEtudiants($numEnseignant,$nomEtu,$numFormation,$numEP,$numGroupe,$idGroupe,$anneeChoisir){
            $query= $this->getQueryEtudiant($numEnseignant, $nomEtu, $numFormation, $numEP, $numGroupe, $idGroupe, $anneeChoisir);
            $sth = $this->bdd->prepare($query);
            $sth->execute();

            return $sth->fetchAll(PDO::FETCH_ASSOC);

            //$results=$this->bdd->query($query);
            //return $results;
    }
    function  getListEtudiantsSeance($numEnseignant,$nomEtu,$numFormation,$numEP,$numGroupe,$idGroupe,$anneeChoisir,$idSeance){
        $query= $this->getQueryEtudiant($numEnseignant, $nomEtu, $numFormation, $numEP, $numGroupe, $idGroupe, $anneeChoisir);
            $queryFinale="($query) UNION (select u.NumUtilisateur,u.NomUtilisateur,u.PrenomUtilisateur,etu.*, ep.* 
                FROM utilisateur u,etudiant etu,ep, presence, seance
                Where presence.idSeance=$idSeance
                AND u.NumUtilisateur= etu.NumEtudiant 
                AND etu.NumEtudiant= presence.NumEtudiant  
                AND presence.idSeance=seance.idSeance
                AND seance.numEP=ep.numEP
            ) ORDER BY NomUtilisateur,PrenomUtilisateur";
            $sth = $this->bdd->prepare($queryFinale);
            $sth->execute();

            return $sth->fetchAll(PDO::FETCH_ASSOC);

            //$results=$this->bdd->query($query);
            //return $results;
    }
    function  getGroupesById($idgrp){
        if(!$idgrp){
            $idgrp="NULL";
        }
        $sth = $this->bdd->prepare("
    SELECT GroupeTd.*
    FROM GroupeTD
    WHERE GroupeTd.idgrp = ".$idgrp );
        $sth->execute();

    return $sth->fetch(PDO::FETCH_ASSOC); 
    }
    function  getGroupesByEP($NumEp){
        $sth = $this->bdd->prepare("
    SELECT GroupeTd.*
    FROM GroupeTD
    WHERE GroupeTd.numEP = '" .$NumEp . "'");
    $sth->execute();

    return $sth->fetchAll(PDO::FETCH_ASSOC);
    }
    function  getGroupeByEtuEP($NumEtudiant,$NumEp){
        $sth = $this->bdd->prepare("
    SELECT GroupeTd.*
    FROM etudiant, GroupeTD, etu_appartient_groupe
    WHERE etudiant.NumEtudiant = '" .$NumEtudiant . "'
    AND GroupeTd.numEP = '" .$NumEp . "'
    AND etudiant.NumEtudiant = etu_appartient_groupe.numEtudiant 
    AND etu_appartient_groupe.idGrp=GroupeTD.idGrp");
    $sth->execute();

    return $sth->fetch(PDO::FETCH_ASSOC);
    }
    function  getGroupesByNumGrpEP($numGrp,$NumEp){
        $sth = $this->bdd->prepare("
    SELECT GroupeTd.*
    FROM GroupeTD
    WHERE GroupeTd.numEP = '" .$NumEp . "'
    AND GroupeTd.numgrp=$numGrp");
    $sth->execute();

    return $sth->fetch(PDO::FETCH_ASSOC);
    }
    
    function updateNumGrp($numEtu,$idGrp,$numEp,$anneeChoisir){
        $querySelect="SELECT etu_appartient_groupe.idGrp FROM etu_appartient_groupe, etudiant, choisir, ue, ep
                                    WHERE etu_appartient_groupe.numEtudiant = '" .$numEtu . "'
                                    AND ep.numEP = '" .$numEp . "'
                                    AND choisir.anneeChoisir=$anneeChoisir 
                                    AND etu_appartient_groupe.numEtudiant=etudiant.NumEtudiant
                                    AND etudiant.NumEtudiant= choisir.NumEtudiant  
                                    AND	choisir.NumUE=ue.NumUE
                                    AND ue.NumUE=ep.numUE
                                    ";
        $sth = $this->bdd->prepare($querySelect);
        $sth->execute();
        $grp=$sth->fetch(PDO::FETCH_ASSOC);
        if(!$grp){
            $res=$this->addEtuInGroupe($numEtu,$idGrp,$anneeChoisir);
        }else{
            $query="UPDATE etu_appartient_groupe
                SET idgrp=".$idGrp."
                WHERE idgrp = ".$grp["idGrp"]."
                AND etu_appartient_groupe.numEtudiant = '" .$numEtu . "'";
            $res=$this->bdd->query($query);
        }
        return $res;
    }
        
    function addEtuInGroupe($numEtu,$idGrp,$annee){
        $query="INSERT INTO `etu_appartient_groupe` (`anneeGroupeTD`, `numEtudiant`, `idgrp`) VALUES
('$annee', '$numEtu', '$idGrp');";
        return $this->bdd->query($query);
    }
    
    function getPresences($numEtu,$numEP, $annee){
        $query="select p.numEtudiant, count(*) as nb, p.presence
            FROM presence p, seance s
            WHERE p.numEtudiant=$numEtu
            AND p.idSeance=s.idSeance
            AND s.numEP=$numEP
            GROUP BY p.presence";
    
    $sth = $this->bdd->prepare($query);
    $sth->execute();
    $res=$sth->fetchAll(PDO::FETCH_ASSOC);
    $tabRes=array();
    foreach ($res as $key => $p) {
        $tabRes[$p["presence"]]=array("numEtudiant"=>$p["numEtudiant"],"nb"=>$p["nb"]);
    }
    return $tabRes;
    }
    
    function getPresence($numEtu,$idSeance){
        $query="select presence
            FROM presence 
            WHERE numEtudiant=$numEtu
            AND idSeance=$idSeance
           ";
    $sth = $this->bdd->prepare($query);
    $sth->execute();
    return $sth->fetch(PDO::FETCH_ASSOC);
    
    }
    
    function getSeanceById($idSeance){
        $query="SELECT seance.*, ep.libelleEP,IF( (MONTH(seance.dateSeance)>9), YEAR(seance.dateSeance),( YEAR(seance.dateSeance)-1) ) as annee
            FROM seance, ep
            WHERE seance.idSeance='$idSeance'
            AND seance.numEP=ep.numEP ";
    $sth = $this->bdd->prepare($query);
    $sth->execute();
    return $sth->fetch(PDO::FETCH_ASSOC);
        
    }
    
    function getNumEP($numEnseinant){
        
        $query="SELECT numEP FROM enseignerep WHERE numEnseignant = $numEnseinant";
        return $this->bdd->query($query);
    }
    
    function ajouterSeance($numero ,$libelleSeance,$DateSeance, $timeSeance,$numEnseignant, $idgroupe,$numEP){
        $numero=$numero?$numero:0;
        
        $query="INSERT INTO seance (`Numero`,`libelleSeance`,`dateSeance`,`numEnseignant`,`numEP`, `idgrp`) VALUES
        ($numero,'$libelleSeance','$DateSeance $timeSeance','$numEnseignant', '$numEP', $idgroupe)";
        echo($query);
        return $this->bdd->query($query);
    }
    
    
    
   function deleteSeance($idSeance){
   $queryP="delete from presence where idSeance= $idSeance";
   $this->bdd->query($queryP);
   $query="delete from seance where idSeance= $idSeance";
   return $this->bdd->query($query);
   }
   
   function updatePresence($numEtu,$idSeance,$presence){
        $querySelect="SELECT idSeance FROM presence
                                    WHERE numEtudiant = '" .$numEtu . "'
                                    AND idSeance = '" .$idSeance . "'
                                    ";
        $sth = $this->bdd->prepare($querySelect);
        $sth->execute();
        $grp=$sth->fetch(PDO::FETCH_ASSOC);
        if(!$grp){
            $res=$this->ajouterPresence($numEtu,$idSeance,$presence);
        }else{
            $query="UPDATE presence
                SET presence='".$presence."'
                WHERE idSeance = '" .$idSeance . "'
                AND numEtudiant = '" .$numEtu . "'";
            $res=$this->bdd->query($query);
        }
        return $res;
    }
    
    function ajouterPresence($numEtu,$idSeance,$presence){
        $query="INSERT INTO presence (`presence`,`idSeance`,`numEtudiant`) VALUES
        ('".$presence."','".$idSeance."','".$numEtu."');";
        return $this->bdd->query($query);
    }
    
    function updateSeance($idSeance,$numero, $libelleSeance, $dateSeance, $numEp, $presences,$idgrp){
        $query="UPDATE seance
                SET numero='".$numero."',
                    libelleSeance='".$libelleSeance."',
                    dateSeance='".$dateSeance."',
                    numEP='".$numEp."',
                    idgrp='".$idgrp."'    
                WHERE idSeance = '" .$idSeance . "'";
        $res=$this->bdd->query($query);
        foreach ($presences as $numEtu => $presence) {
            $this->updatePresence($numEtu, $idSeance, $presence);
        }
    }
    
    function getNextGroupe($numEp){
        $query="select (MAX(groupeTd.numgrp)+1) as numgrp
            FROM groupeTd 
            WHERE groupeTd.numEp=$numEp;
           ";
        $sth = $this->bdd->prepare($query);
        $sth->execute();
        $tab=$sth->fetch(PDO::FETCH_ASSOC);
        if(!$tab["numgrp"] || $tab["numgrp"]=="NULL"){
            $tab["numgrp"]=1;          
        }
        return $tab["numgrp"];
    }
    function addGroupe($numEp,$numgrp){
        $query="INSERT INTO groupeTd (`idgrp`,`numgrp`,`numEP`) VALUES
        (NULL,'".$numgrp."','".$numEp."');";
        return $this->bdd->query($query);
    }    
}
?>